<?php
/**
 * Выносим повторяющиеся куски кода в так называемые "поведения"
 * В данном случае это поведение приводит поля моделей,
 * в которых записана дата, к указанному формату
 */
class DateFormatBehavior extends CActiveRecordBehavior
{
    /**
     * Список свойств модели, с типом данных "Дата"
     * @var array
     */
    public $dates = array();

    /**
     * Желаемый формат
     * @var string
     */
    public $format = 'd.m.Y';

    private $dbFormat = 'Y-m-d H:i:s';

	/**
	 * Сразу после заполнения модели
	 * Меняем формат даты у поля
	 */
    public function afterFind()
    {
        foreach($this->dates as $dateAttribute)
        {
            if (!empty($this->owner->$dateAttribute)) {
                $this->owner->$dateAttribute = new DateTime($this->owner->$dateAttribute);
                $this->owner->$dateAttribute = $this->owner->$dateAttribute->format($this->format);
            }
        }

        return true;
    }

	/**
	 * Перед тем как сохранить модель в базу
	 * Приводим поля даты к формату, необходимому для БД
	 */
    public function beforeSave()
    {
        foreach($this->dates as $dateAttribute)
        {
            if (!empty($this->owner->$dateAttribute)) {
                $this->owner->$dateAttribute = new DateTime($this->owner->$dateAttribute);
                $this->owner->$dateAttribute = $this->owner->$dateAttribute->format($this->dbFormat);
            }
			else{
				$this->owner->$dateAttribute = null;
			}
        }

        return true;
    }
}